home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PET / S-Super PET / (s)t4.d64 / DIRECTORY.ASM < prev    next >
Assembly Source File  |  2009-01-18  |  5KB  |  125 lines

  1. ;Program to get directories from the Waterloo micromenu
  2. ;By Eric Brandon
  3. ;Version 1.10 09/06/82
  4.  
  5.            xref putchar_
  6.            xref getchar_
  7.            xref getrec_
  8.            xref tbreak_
  9.            xref putnl_
  10.            xref diropenf_
  11.            xref dirreadf_
  12.            xref dirclose_
  13.            xref errorf_
  14.  
  15. out        equ  $ff80          ;Micro-menu jump address
  16. buffer     equ  $2000          ;buffer for directory entry
  17. drive      equ  $3000          ;drive number entry buffer
  18. dirblock   equ  $3100          ;directory file control block address
  19. line       equ  $3104          ;current screen line
  20.  
  21.            ldd #0              ;clear line counter
  22.            std line
  23.            ldd  #whatdrive     ;get address of message
  24. again      jsr display         ;display it
  25.            ldd #9              ;maximum length of drive number entry
  26.            pshs d              ;save on stack as P2
  27.            ldd #drive          ;address of buffer for "Drive ? x"
  28.            jsr getrec_         ;get record
  29.            puls d              ;clean up stack
  30.            jsr putnl_          ;new line
  31.            ldd drive+8         ;get character back
  32.            cmpa #'0            ;check if drive 0 wanted
  33.            bne not0            ;check next
  34.            ldd #drive0         ;get drive 0 address
  35.            jmp opendir         ;go and open the file
  36. not0       cmpa #'1            ;check if drive 1 wanted
  37.            lbne driverr        ;incorrect drive number
  38.            ldd #drive1         ;get drive 1 address
  39. opendir    jsr diropenf_       ;open directory file
  40.            lbeq direrr         ;could not open file
  41.            std dirblock        ;save file control block address
  42.  
  43.            loop
  44.                 ldd line       ;get current line
  45.                 addd #1        ;add 1 to it
  46.                 std line       ;save it
  47.                 cmpd #24       ;check if on line 24 yet
  48.                 if eq          ;if 24 lines
  49.                     ldd #1              ;wait for <return>
  50.                     pshs d
  51.                     ldd #buffer
  52.                     jsr getrec_
  53.                     puls d
  54.                     ldd #0              ;clear line count
  55.                     std line
  56.                 endif
  57.  
  58.                 ldd #buffer    ;get P2, address where entry will go
  59.                 pshs d         ;save it on stack
  60.                 ldd dirblock   ;get file control block address
  61.                 jsr dirreadf_  ;get a directory entry
  62.                 puls d         ;clean up stack
  63.                 ldd #buffer    ;get address of directory entry
  64.                 jsr display    ;put it on screen
  65.                 jsr putnl_     ;crlf on screen
  66.                 ldd dirblock   ;get file control block address
  67.                 jsr errorf_    ;check if end of file
  68.                 cmpd #2        ;check if end of file
  69.            until eq            ;until end of file
  70.  
  71.            ldd dirblock        ;get address of file control block
  72.            jsr dirclose_      ;close file
  73.  
  74. leave      ldd #1              ;arbitrary length
  75.            pshs d              ;P2
  76.            ldd #buffer         ;address of buffer
  77.            jsr getrec_         ;get <return>
  78.            puls d              ;clean stack
  79.            jmp out             ;quit
  80.  
  81. display    tfr  d,x            ;put P1 in X
  82.            loop
  83.                 ldb  ,x+       ;get character
  84.                 quif eq
  85.                 pshs x         ;save address
  86.                 jsr  putchar_  ;display character
  87.                 puls x         ;restore address
  88.            endloop
  89.            rts
  90.  
  91. direrr     jsr putnl_           ;crlf to screen
  92.            ldd #direrrmsg       ;get address of disk error message
  93.            jsr display          ;put message on screen
  94.            jmp leave            ;get <return> and exit
  95.  
  96. driverr    jsr putnl_          ;crlf to screen
  97.            ldd #drivemsg       ;get address of drive number error message
  98.            jsr display         ;put message on screen
  99.            ldd #askagain       ;get address of string to reprint
  100.            jmp again           ;do it again
  101.  
  102. ;all data needed by program
  103.  
  104. whatdrive  fcb 12
  105.            fcc "Directory program"
  106.            fcb 13
  107.            fcc "From Commodore Business Machines"
  108.            fcb 13
  109.            fcc "By Eric Brandon"
  110. askagain   fcb 13,13
  111.            fcc "Drive ? "
  112.            fcb 0
  113.  
  114. drive0     fcc "disk/0"
  115.            fcb 0
  116.  
  117. drive1     fcc "disk/1"
  118.            fcb 0
  119.  
  120. direrrmsg  fcc "Cannot open directory"
  121.            fcb 13,0
  122.  
  123. drivemsg   fcc "Incorrect drive number. Use 0 or 1"
  124.            fcb 0
  125.